// 将嵌套数组转成一维数组

// 方法一：Array.prototype.flat
function fn1 (arr) {
  return arr.flat(Infinity);
}

// 方法2：自定义递归
function fn2 (arr) {
  let ans = [];
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      const temp = fn1(arr[i]);
      ans.push(...temp);
    } else {
      ans.push(arr[i]);
    }
  }
  return ans;
}

// 方法3：使用扩展运算符 ---- 只展开了一层
function fn3 (arr) {
  let ans = [];
  for (let i = 0; i < arr.length; i++) {
    if (Array.isArray(arr[i])) {
      ans = ans.concat(...arr[i]);
    } else {
      ans.push(arr[i]);
    }
  }
  return ans;
}

// 方法4: 使用reduce方法
function fn4 (arr) {
  return arr.reduce((acc, val) => {
    return Array.isArray(val) ? [...acc, ...fn4(val)] : [...acc, val]
  }, [])
}

const arr = [1,2,[3,[4,[5]]],6];
console.log(fn1(arr));
console.log(fn2(arr));
console.log(fn3(arr));
console.log(fn4(arr));